package jp.co.nes.awssupport.business.bean;

import java.math.BigDecimal;
import java.time.ZonedDateTime;

import jp.co.nes.awssupport.business.constant.AwsProductName;
import jp.co.nes.awssupport.common.bean.BaseBean;

/**
 * ReservedResultBeanです。<br>
 * AWSのAPI呼び出し結果を格納します。
 */
public class ReservedResultBean extends BaseBean {

    /** serialVersionUID */
    private static final long serialVersionUID = 1L;

    /** AWSサービス製品名 */
    private AwsProductName awsProductName;

    /** ID */
    private String id;

    /** リージョンコード */
    private String regionCode;

    /** マルチAZ */
    private String multiAZ;

    /** 製品説明 */
    private String productDescription;

    /** タイプ */
    private String type;

    /** 開始日時 */
    private ZonedDateTime start;

    /** 終了日時 */
    private ZonedDateTime end;

    /** 要求タイプ */
    private String offeringType;

    /** 要求クラス */
    private String offeringClass;

    /** 期間 */
    private int duration;

    /** 数量 */
    private BigDecimal count;

    /** 1つ当たりの料金 */
    private BigDecimal fixedPrice;

    /**
     * AWSサービス製品名を引数にもつコンストラクタです。
     */
    public ReservedResultBean(AwsProductName awsProductName) {
        this.awsProductName = awsProductName;
    }

    /**
     * AWSサービス製品名を返却します。
     *
     * @return AWSサービス製品名
     */
    // 過去、本メソッドの戻り値を参照して、処理を分岐するものが存在したが、現状、不要である。
    // よって、本メソッドおよびawsProductNameフィールドは、利用されていないが、
    // 今後、必要になった場合にそなえて、メソッドとフィールドは残している。
    public AwsProductName getAwsProductName() {
        return awsProductName;
    }

    /**
     * IDを返却します。
     *
     * @return ID
     */
    public String getId() {
        return id;
    }

    /**
     * IDを設定します。
     *
     * @param id ID
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * リージョンコードを返却します。
     *
     * @return リージョンコード
     */
    public String getRegionCode() {
        return regionCode;
    }

    /**
     * リージョンコードを設定します。
     *
     * @param regionCode リージョンコード
     */
    public void setRegionCode(String regionCode) {
        this.regionCode = regionCode;
    }

    /**
     * マルチAZを返却します。
     *
     * @return マルチAZ
     */
    public String getMultiAZ() {
        return multiAZ;
    }

    /**
     * マルチAZを設定します。
     *
     * @param multiAZ マルチAZ
     */
    public void setMultiAZ(String multiAZ) {
        this.multiAZ = multiAZ;
    }

    /**
     * 製品説明を返却します。
     *
     * @return 製品説明
     */
    public String getProductDescription() {
        return productDescription;
    }

    /**
     * 製品説明を設定します。
     *
     * @param productDescription 製品説明
     */
    public void setProductDescription(String productDescription) {
        this.productDescription = productDescription;
    }

    /**
     * タイプを返却します。
     *
     * @return タイプ
     */
    public String getType() {
        return type;
    }

    /**
     * タイプを設定します。
     *
     * @param type タイプ
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * 開始日時を返却します。
     *
     * @return 開始日時
     */
    public ZonedDateTime getStart() {
        return start;
    }

    /**
     * 開始日時を設定します。
     *
     * @param start 開始日時
     */
    public void setStart(ZonedDateTime start) {
        this.start = start;
    }

    /**
     * 終了日時を返却します。
     *
     * @return 終了日時
     */
    public ZonedDateTime getEnd() {
        return end;
    }

    /**
     * 終了日時を設定します。
     *
     * @param end 終了日時
     */
    public void setEnd(ZonedDateTime end) {
        this.end = end;
    }

    /**
     * 要求タイプを返却します。
     *
     * @return 要求タイプ
     */
    public String getOfferingType() {
        return offeringType;
    }

    /**
     * 要求タイプを設定します。
     *
     * @param offeringType 要求タイプ
     */
    public void setOfferingType(String offeringType) {
        this.offeringType = offeringType;
    }

    /**
     * 要求クラスを返却します。
     *
     * @return 要求クラス
     */
    public String getOfferingClass() {
        return offeringClass;
    }

    /**
     * 要求クラスを設定します。
     *
     * @param offeringClass 要求クラス
     */
    public void setOfferingClass(String offeringClass) {
        this.offeringClass = offeringClass;
    }

    /**
     * 期間を返却します。
     *
     * @return 期間
     */
    public int getDuration() {
        return duration;
    }

    /**
     * 期間を設定します。
     *
     * @param duration 期間
     */
    public void setDuration(int duration) {
        this.duration = duration;
    }

    /**
     * 数量を返却します。
     *
     * @return 数量
     */
    public BigDecimal getCount() {
        return count;
    }

    /**
     * 数量を設定します。
     *
     * @param count 数量
     */
    public void setCount(BigDecimal count) {
        this.count = count;
    }

    /**
     * 1つ当たりの料金を返却します。
     *
     * @return fixedPrice 1つ当たりの料金
     */
    public BigDecimal getFixedPrice() {
        return fixedPrice;
    }

    /**
     * 1つ当たりの料金を設定します。
     *
     * @param fixedPrice 1つ当たりの料金
     */
    public void setFixedPrice(BigDecimal fixedPrice) {
        this.fixedPrice = fixedPrice;
    }
}
